// 此源代码的使用受BSD样式
// 许可证的约束，该许可证可以在许可证文件中找到。

package base

import (
	"cmd/internal/obj"
)

var Ctxt *obj.Link

// TODO（mdempsky）：这些应该是obj。链接方法。

// PkgLinksym返回给定
// 包前缀中名称的链接器符号。对于用户包，前缀应为包
// 用objabi编码的路径。PathToPrefix。
func PkgLinksym(prefix, name string, abi obj.ABI) *obj.LSym {
	if name == "_" {
		// TODO（mdempsky）：清理来电者和法塔尔夫。
		return linksym(prefix, "_", abi)
	}
	return linksym(prefix, prefix+"."+name, abi)
}

// Linkname返回给定名称的链接器符号，就像它可能出现在
func Linkname(name string, abi obj.ABI) *obj.LSym {
	return linksym("_", name, abi)
}

// linksym是一个内部帮助函数，用于实现上述
// 导出的API。
func linksym(pkg, name string, abi obj.ABI) *obj.LSym {
	return Ctxt.LookupABIInit(name, abi, func(r *obj.LSym) { r.Pkg = pkg })
}
